Roam Research MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MEMORIES_TAG | No | The tag used for storing memories | #[[LLM/Memories]] |
| ROAM_API_TOKEN | Yes | Your Roam Research API token | |
| ROAM_GRAPH_NAME | Yes | Your Roam graph name | |
| HTTP_STREAM_PORT | No | Port for HTTP Stream communication | 8088 |
| CUSTOM_INSTRUCTIONS_PATH | No | Path to your custom instructions file (markdown) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Server capabilities have not been inspected yet.
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| roam_add_todoA | Add a list of todo items as individual blocks to today's daily page in Roam. Each item becomes its own actionable block with todo status. NOTE on Roam-flavored markdown: For direct linking: use [[link]] syntax. For aliased linking, use alias syntax. Do not concatenate words in links/hashtags - correct: #[[multiple words]] #self-esteem (for typically hyphenated words). IMPORTANT: Before using this tool, ensure that you have loaded into context the 'Roam Markdown Cheatsheet' resource. |
| roam_fetch_page_by_titleB | Fetch page by title. Returns content in the specified format. |
| roam_create_pageA | Create a new standalone page in Roam with optional content, including structured outlines, using explicit nesting levels and headings (H1-H3). This is the preferred method for creating a new page with an outline in a single step. Best for:
|
| roam_create_outlineA | Add a structured outline to an existing page or block (by title text or uid), with customizable nesting levels. To create a new page with an outline, use the
|
| roam_import_markdownA | Import nested markdown content into Roam under a specific block. Can locate the parent block by UID (preferred) or by exact string match within a specific page. If a |
| roam_search_for_tagA | Search for blocks containing a specific tag and optionally filter by blocks that also contain another tag nearby or exclude blocks with a specific tag. This tool supports pagination via the |
| roam_search_by_statusB | Search for blocks with a specific status (TODO/DONE) across all pages or within a specific page. |
| roam_search_block_refsC | Search for block references within a page or across the entire graph. Can search for references to a specific block or find all block references. |
| roam_search_hierarchyB | Search for parent or child blocks in the block hierarchy. Can search up or down the hierarchy from a given block. |
| roam_find_pages_modified_todayB | Find pages that have been modified today (since midnight), with pagination and sorting options. |
| roam_search_by_textA | Search for blocks containing specific text across all pages or within a specific page. This tool supports pagination via the |
| roam_search_by_dateA | Search for blocks or pages based on creation or modification dates. Not for daily pages with ordinal date titles. |
| roam_markdown_cheatsheetB | Provides the content of the Roam Markdown Cheatsheet resource, optionally concatenated with custom instructions if CUSTOM_INSTRUCTIONS_PATH is set. |
| roam_rememberA | Add a memory or piece of information to remember, stored on the daily page with MEMORIES_TAG tag and optional categories. NOTE on Roam-flavored markdown: For direct linking: use [[link]] syntax. For aliased linking, use alias syntax. Do not concatenate words in links/hashtags - correct: #[[multiple words]] #self-esteem (for typically hyphenated words). IMPORTANT: Before using this tool, ensure that you have loaded into context the 'Roam Markdown Cheatsheet' resource. |
| roam_recallB | Retrieve all stored memories on page titled MEMORIES_TAG, or tagged block content with the same name. Returns a combined, deduplicated list of memories. Optionally filter blocks with a specific tag and sort by creation date. |
| roam_datomic_queryA | Execute a custom Datomic query on the Roam graph for advanced data retrieval beyond the available search tools. This provides direct access to Roam's query engine. Note: Roam graph is case-sensitive. Optimal Use Cases for
List of some of Roam's data model Namespaces and Attributes: ancestor (descendants), attrs (lookup), block (children, heading, open, order, page, parents, props, refs, string, text-align, uid), children (view-type), create (email, time), descendant (ancestors), edit (email, seen-by, time), entity (attrs), log (id), node (title), page (uid, title), refs (text). Predicates (clojure.string/includes?, clojure.string/starts-with?, clojure.string/ends-with?, <, >, <=, >=, =, not=, !=). Aggregates (distinct, count, sum, max, min, avg, limit). Tips: Use :block/parents for all ancestor levels, :block/children for direct descendants only; combine clojure.string for complex matching, use distinct to deduplicate, leverage Pull patterns for hierarchies, handle case-sensitivity carefully, and chain ancestry rules for multi-level queries. |
| roam_process_batch_actionsA | Executes a sequence of low-level block actions (create, update, move, delete) in a single, non-transactional batch. Actions are executed in the provided order. For creating nested blocks, you can use a temporary client-side UID in a parent block and refer to it in a child block within the same batch. For actions on existing blocks, a valid block UID is required. Note: Roam-flavored markdown, including block embedding with |
| roam_fetch_block_with_childrenA | Fetch a block by its UID along with its hierarchical children down to a specified depth. Returns a nested object structure containing the block's UID, text, order, and an array of its children. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 18 tools
Most tools have distinct purposes, such as roam_create_page for new pages versus roam_create_outline for adding to existing pages. However, some overlap exists: roam_search_by_text and roam_search_for_tag both search for blocks, and roam_process_batch_actions can perform tasks covered by simpler tools like roam_add_todo, which might cause confusion in tool selection.
All tool names follow a consistent snake_case pattern with a 'roam_' prefix and descriptive verb_noun combinations, such as roam_fetch_page_by_title and roam_search_by_status. This uniformity makes the tool set predictable and easy to navigate for an agent.
With 18 tools, the count is slightly high but reasonable for a comprehensive Roam Research server covering creation, querying, search, and memory management. It avoids being overwhelming by grouping related functionalities, though some tools could potentially be consolidated to reduce complexity.
The tool set provides complete coverage for Roam Research operations, including CRUD actions (e.g., roam_create_page, roam_process_batch_actions), advanced querying (roam_datomic_query), various search methods (e.g., by text, tag, date), and specialized features like memory management (roam_remember, roam_recall). No obvious gaps exist for the domain.